Redis 命令基础
Contents
Redis(Remote Dictionary Server)
redis 的可执行文件有
1 | redis-server redis 服务器 |
启动redis
直接启动
直接运行 redis-server 即可启动redis. redis 服务器默认使用6379端口。
通过 –port 参数可以自定义端口号。
初始化脚本启动redis
停止redis
强行终止redis 进程可能导致数据丢失
应该使用命令 redis-cli SHUTDOWN。当 redis 收到shutdown 命令后,会先断开所有客户端连接,然后根据配置执行持久化。最后完成退出。
redis 命令行客户端
发送命令
1 | redis-cli -h 127.0.0.1 -p 6379 |
多数据库
一个redis实例提供了多个用来存储数据的字典,客户端可以指定讲数据存储在哪个字典中,每一个字典相当于一个独立的数据库。
每个数据库对外都是以一个从0开始的递增数字命名,redis 默认支持16个数据库。客户端与redis 建立连接后会自动选择0号数据库,不过随时可以使用select 命令更换数据库
1 | select 1 |
redis 不支持自定义数据库的名字,每个数据库都以编号命名,开发者自己记录每个数据库里有哪些数据,多个数据库之间也不是完全隔离的。不同的应用应该使用不同的redis 实例存储数据。一个空的redis 实例占用1 MB 左右。
数据类型
1 获得符合规则的键名列表 KEYS pattern
pattern 支持glob 风格通配符。比如 KEYS * 获得所有的键。
2.判断键的存在性 EXISTS key 存在返回1 否则 0
3.删除键 DEL key
4 TYPE key 获得键值的数据类型
字符串
可以存储任何形式字符串,包括了二进制数据。可以用其存储用户的邮箱,JSON化的对象甚至一张图片。
1 赋值与取值
1 | SET key value |
2 递增数字
1 | INCR key |
当存储的字符串是整数形式时,INCR 使当前 键值 递增,并返回增加后的值。
3 增加指定的整数
1 | INCRBY key increment |
4减少指定的整数
1 | DECR key |
5 增加指定浮点数 INCRBYFLOAT key increment
6 向尾部追加值 append key value append的作用时向键值的末尾追加value,如果键不存在就将该键的值设置为value。
7 获取字符串长度 STRLEN key(返回键值的长度)
8 同时获得/设置多个键值 MGET key1 key2/MSET key1 v1 key2 v2
散列类型
散列类型的键值也是一种字典结构。其中存储了字段和字段值的映射。 但是字段值只能是字符串。不支持其它数据类型。散列类型适合存储对象,使用对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。
1 赋值与取值
1 | HSET key field value |
HSET 不区分插入和更新操作,所以不用事先对存在性进行判断。插入时,返回 1 更新时,返回0
1 | // HMSET 设置多个值 |
2 判断字段是否存在
1 | HEXISTS key field //存在返回 1 否则返回0 键不存在也返回0 |
3 字段不存在时赋值 (存在时不执行)
1 | HSETNX key field value |
4 增加数字
1 | HINCRBY key field increment//字段值增加指定整数 |
5 删除字段
1 | HDEL key field |
6 只获取字段名
1 | HKEYS key |
7 只获取字段值
1 | HVALS key |
8 获取字段数量
1 | HLEN key |
9 获取所有field
1 | hkeys key |
10 获取所有value
1 | hvals key |
列表类型
列表类型可以存储一个有序的字符串列表,常用操作时向列表两端添加元素,或者获得列表的某一个片段。
列表类型内部使用双向链表实现,
1.向列表两端添加元素
1 | LPUSH key value//向列表左边添加元素,返回值表示添加元素后元素的长度。 |
2.向列表两端弹出元素
1 | LPOP key//返回被移除的元素值。 |
3.获取列表中元素个数
1 | LLEN key //复杂度o(1) 会直接读取现成的值。 |
4 获取列表片段
1 | LRANGE key start stop//start 和 stop都是索引。从0开始 |
5 删除列表中指定的值
1 | LREM key count value// 删除前count个值为value的元素。 |
6.获得/设置指定索引的元素值
1 | LINDEX key index |
如果要将列表类型当数组用,LINDEX命令不可少,LINDEX命令用来返回指定索引的元素。
7 只保留列表指定片段
1 | LTRIM key start end |
8 向列表插入元素
1 | LINSERT key BEFORE|AFTER pivot value |
首先会在列表中从左到右查找值为pivot的元素,然后根据BEFORE|BEFER 来决定将 value 插前面还是后面。
9 将元素从一个列表移到另一个列表
1 | RPOPLPUSH source destination |
10. 阻塞式弹出
1 | blpop key timeout |
集合类型
集合中每个元素时不同的,且没有顺序。一个集合类型键可以存储之多2^32-1个字符串。集合类型在redis内部时使用值为空的散列表实现的。
1.增加/删除元素
1 | SADD key member |
SADD 命令用来向集合中增加一个或多个元素,键不存在则会自动创建。
2 获得集合中所有的元素
1 | SMEMBERS key |
3 判断元素是否在集合中
1 | SISMEMBER key member |
4 集合间运算
1 | SDIFF key1 key2 差集/SINTER key1 key2 交集运算/SUNION key1 key2并集运算 |
5 获得集合中元素个数
1 | SCARD key |
6 进行集合运算并将结构存储
1 | SDIFFSTORE destination key |
7 随机获得集合中一个元素
1 | SRANDMEMBER key |
8 从集合中弹出一个元素
1 | SPOP key |
有序集合
在集合类型的基础上为集合中的每个元素关联了一个分数,虽然集合中每个元素时不同的,但是他们的分数可以相同。
1 增加元素
1 | ZADD key score member |
ZADD 命令向有序集合中加入一个元素和该元素的分数,返回新加入到集合的元素个数。
2 获得元素的分数
1 | ZSCORE key member |
3 获得排名在某个范围的元素列表
1 | ZRANGE key start stop// start stop 都是索引 |
zrange 命令会按照元素分数从小到大的顺序返回索引从start到stop之间的所有的元素
4 获得指定分数范围的元素
1 | ZRANGEBYSCORE key min max |
5 增加某个元素的分数
1 | ZINCRBY key increment member |
6 获得集合中元素的数量
1 | ZCARD key |
7 获得指定分数范围内的元素个数
1 | ZCOUNT key min max |
8删除一个或者多个元素
1 | ZREM key member |
事务
redis 中的事务是一组命令的集合,事务同命令一样都是redis 的最小执行单位。
先用MULTI命令告诉redis 下面所有都是一个事务,EXEC命令告诉redis 结束了。
WATCH
有些时候需要知道一条命令的返回值,再根据返回值进行下一步操作,Watch指令可以监控一个或者多个键,一旦其中有一个键被修改或者删除,之后的事务就不会执行,监控一直持续到EXEC命令。
### 生存时间
在redis 中可以使用EXPIRE 命令设置一个键的生存时间,到时间后redis 会自动删除它。
1 | EXPIRE key seconds//单位时秒 |
排序
##### 有序集合的集合操作
集合类型提供了强大的集合操作命令,但是如果需要排序就要用到有序集合类型。
sort
sort 命令可以对列表类型,集合类型和有序集合类型键进行排序,
sort 指令的by 参数
by 参数的语法为by 参考键 参考键可以时字符串类型键或者时散列类型键的某个字段(表示为键名-> 字段名)若提供了by参数,sort命令将不再依据元素自身的值进行排序,而是对每个元素使用元素的值替换掉参考键的第一个*并取出其值。然后对该值进行排序。
get参数
get参数不影响排序,它的作用是使sort命令的返回结果不再时元素自身的值,而是get参数中指定的键值。也是用×作为占位符。
Author: corn1ng
Link: https://corn1ng.github.io/2017/12/09/Redis(Remote Dictionary Server)/
License: 知识共享署名-非商业性使用 4.0 国际许可协议